file_extension: A extensão do arquivo.
data %>% select(file_extension) %>% unique
## # A tibble: 42 x 1
## file_extension
## <chr>
## 1 md
## 2 js
## 3 json
## 4 html
## 5 py
## 6 java
## 7 css
## 8 xml
## 9 txt
## 10 yml
## # ... with 32 more rows
Como é possível ver no resumo acima, temos extensões para scripts, imagens, textos, etc.
month_day, the_month, the_year: Dia, mês e ano respectivamente em que a coleta dos dados foi efetuada.
data %>% select(-file_extension, -users) %>% summary()
## month_day the_month the_year
## Min. : 1.00 Min. : 1.000 Min. :2016
## 1st Qu.: 8.00 1st Qu.: 3.000 1st Qu.:2016
## Median :15.00 Median : 4.000 Median :2016
## Mean :15.49 Mean : 5.427 Mean :2016
## 3rd Qu.:23.00 3rd Qu.: 8.000 3rd Qu.:2017
## Max. :31.00 Max. :12.000 Max. :2017
Temos dados desde 2016 até 2017, como falado anteriormente.
users: Quantidade de usuários que modificaram aquele tipo de arquivo até a data da coleta.
data %>% select(users) %>% summary()
## users
## Min. : 501
## 1st Qu.: 763
## Median : 1520
## Mean : 2151
## 3rd Qu.: 2782
## Max. :10279
Como possível visualizar acima, temos tipos de arquivos que tiveram 501 usuários mas também temos outros que tiveram 10279 usuários.
Como temos 42 tipos de arquivos diferentes, iremos selecionar apenas 2 para a nossa análise, que serão js (JavaScript) e py (Python).
languages <- data %>%
filter(file_extension %in% c("py","js"))
Para a nossa análise teremos que ter duas novas variáveis, que são popularity e is_weekend, que irão descrever quão popular é um arquivo e se a data da coleta corresponde a um fim de semana, respectivamente.
Para popularidade não teremos tanto trabalho, iremos adotar a popularidade como sendo a mediana de usuários que contribuíram. Ou seja, quanto maior a média, mais popular é aquela linguagem.
A partir das variáveis month_day, the_month e the_year iremos descobrir se a data se refere a um fim de semana ou não.
Para isso, utilizaremos as bibliotecas lubridate e timeDate.
languages %>%
mutate(cronology = lubridate::ymd(paste(the_year,
the_month,
month_day)),
is_weekend = timeDate::isWeekend(cronology)) -> languages
languages %>%
sample_n(10)
## # A tibble: 10 x 7
## file_extension month_day the_month the_year users cronology is_weekend
## <chr> <int> <int> <int> <int> <date> <lgl>
## 1 py 24 1 2017 4831 2017-01-24 FALSE
## 2 py 4 1 2016 4127 2016-01-04 FALSE
## 3 js 19 3 2017 4613 2017-03-19 TRUE
## 4 py 31 5 2016 4965 2016-05-31 FALSE
## 5 js 28 1 2016 8118 2016-01-28 FALSE
## 6 py 11 8 2016 4505 2016-08-11 FALSE
## 7 py 21 3 2017 4957 2017-03-21 FALSE
## 8 js 19 2 2016 7917 2016-02-19 FALSE
## 9 js 7 5 2016 4444 2016-05-07 TRUE
## 10 js 2 8 2016 5960 2016-08-02 FALSE
languages %>%
group_by(file_extension, is_weekend) %>%
summarise(popularity = median(users)) %>%
ggplot(aes(
x = reorder(file_extension, popularity),
y = popularity,
fill = is_weekend)) +
geom_bar(stat = "identity") +
labs(x = "File extension", y = "Popularity") -> p
ggplotly(p)
Na visualização acima conseguimos perceber que JavaScript apresenta uma popularidade maior tanto nos dias de semana como nos finais de semana em relação a Python.
languages %>%
ggplot(aes(
x = cronology,
y = users,
color = is_weekend)) +
geom_point() +
facet_wrap(~file_extension) +
labs(x = "Cronology", y = "Users") -> p
ggplotly(p)
Como é possível ver, ambas as linguagens possuem um comportamento semelhate, um crescimento rápido depois uma queda, mais uma subida e por fim uma queda nas edições dos ultimos meses.
Uma coisa bastante interessante é perceber que as alterações tanto em Python como em JavaScript apresentam um comportamento bastante semelhante quando feitas em finais de semana ou não.
Para isso, iremos analisar as linguagens separadamente…
languages %>%
filter(file_extension == "js") %>%
ggplot(aes(
x = is_weekend,
y = users,
group = is_weekend,
fill = is_weekend)) +
geom_boxplot() +
labs(y = "Number of editing users") +
ggtitle("JavaScript popularity (weekdays vs weekend)") +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank()) -> p
ggplotly(p)
Com a visualização, podemos entender que os desenvolvedores JavaScript costumam trabalhar durante a semana.
Como se trata de uma amostra e com alguns dados faltantes, não podemos concluir com tanta confiança.
Para isso, iremos utilizar a técnica de Bootstrapping para nos ajudar com a diferença não pareada entre a popularidade durante a semana e no fim de semana.
languages %>%
filter(file_extension == "js") -> js
b.diff.means <- bootstrap2(js$users,
treatment = js$is_weekend,
median, R = 10000)
means.diff = CI.percentile(b.diff.means, probs = c(.025, .975))
means.diff
## 2.5% 97.5%
## median: FALSE-TRUE 2679 3051
data.frame(means.diff) %>%
ggplot(aes(
x = "Difference",
ymin = X2.5.,
ymax = X97.5.)) +
geom_errorbar(width = .2) +
geom_hline(yintercept = 0, colour = "red") +
labs(x = "")
O C.I. nos mostra que JavaScript é bem mais popular durante a semana, pois o intervalo é bem acima de 0. Isso de fato era esperado, dado as visualizações anteriores e também (intuitivamente) as empresas que utilizam JavaScript geralmente tem o seu ciclo de trabalho apenas durante a semana.
Portanto, podemos afirmar com 95% de confiança que JavaScript é mais popular durante a semana, dado que o intervalo de confiança da diferença não pareada para popularidade na semana e no fim de semana não passa pelo eixo y = 0.
languages %>%
filter(file_extension == "py") %>%
ggplot(aes(
x = is_weekend,
y = users,
group = is_weekend,
fill = is_weekend)) +
geom_boxplot() +
labs(y = "Number of editing users") +
ggtitle("Python popularity (weekdays vs weekend)") +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank()) -> p
ggplotly(p)
Com a visualização, podemos entender que os desenvolvedores Python também costumam trabalhar bem mais durante a semana.
languages %>%
filter(file_extension == "py") -> py
b.diff.means <- bootstrap2(py$users,
treatment = py$is_weekend,
median, R = 10000)
means.diff = CI.percentile(b.diff.means, probs = c(.025, .975))
means.diff
## 2.5% 97.5%
## median: FALSE-TRUE 2062.5 2234.5
data.frame(means.diff) %>%
ggplot(aes(
x = "Difference",
ymin = X2.5.,
ymax = X97.5.)) +
geom_errorbar(width = .2) +
geom_hline(yintercept = 0, colour = "cyan") +
labs(x = "")
O C.I. nos mostra que Python também é bem mais popular durante a semana, pois o intervalo é bem acima de 0. Isso de fato também era esperado.
Portanto, de forma semelhante, podemos afirmar com 95% de confiança que Python é mais popular durante a semana, dado que o intervalo de confiança da diferença não pareada para popularidade na semana e no fim de semana não passa pelo eixo y = 0.
languages %>%
filter(is_weekend) %>%
ggplot(aes(
x = file_extension,
y = users,
group = file_extension,
fill = file_extension)) +
geom_boxplot() +
ggtitle("Python vs JavaScript (Weekends)") +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank()) +
labs(y = "Number of users editing files")
Dada a visualização acima, podemos ver que JavaScript é bem mais popular que Python.
Utilizando a mesma técnica para Bootstrapping…
languages %>%
filter(is_weekend) -> weekend
b.diff.means <- bootstrap2(weekend$users,
treatment = weekend$file_extension,
median, R = 10000)
means.diff = CI.percentile(b.diff.means, probs = c(.025, .975))
means.diff
## 2.5% 97.5%
## median: js-py 1574.671 1886
data.frame(means.diff) %>%
ggplot(aes(
x = "Difference",
ymin = X2.5.,
ymax = X97.5.)) +
geom_errorbar(width = .2) +
geom_hline(yintercept = 0, colour = "brown") +
labs(x = "")
A diferença entre a popularidade existe sim. Podemos concluir que JavaScript é mais popular em finais de semana em relação a Python, como também pudemos perceber nas demais visualizações acima.
Portanto, observando os intervalos de confiança para as diferenças não pareadas entre JavaScript e Python durante os finais de semana, podemos dizer com um grau de confiança de 95% que JavaScript é significativamente mais popular que Python nos fins de semana.